home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / MDISAMP.PAK / MDIFILE.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  7KB  |  252 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1991, 1995 by Borland International, All Rights Reserved
  4. //
  5. //----------------------------------------------------------------------------
  6. #include <owl/pch.h>
  7. #include <owl/applicat.h>
  8. #include <owl/editfile.h>
  9. #include <owl/mdi.h>
  10. #include <owl/decmdifr.h>
  11. #include <owl/statusba.h>
  12. #include <owl/controlb.h>
  13. #include <owl/buttonga.h>
  14. #include <owl/gdiobjec.h>
  15.  
  16. #include "mdifile.h"
  17. #include <owl/editfile.rh>
  18. #include "dlwrap.h"
  19.  
  20. //
  21. //
  22. //
  23. const char AppName[] = "MDI File Editor";
  24.  
  25. const TDecoratedFrame::TLocation Location[] = {
  26.   TDecoratedFrame::Top,
  27.   TDecoratedFrame::Left,
  28.   TDecoratedFrame::Right
  29. };
  30.  
  31. //
  32. //
  33. //
  34. class TMDIFileApp : public TApplication {
  35.   public:
  36.     TMDIFileApp(const char* name) : TApplication(name) {}
  37.     void InitMainWindow();
  38.  
  39.   protected:
  40.     TOpenSaveDialog::TData   FileData;
  41.     TMDIClient*              Client;
  42.     TGadgetWindow::THintMode HintMode;
  43.     TDecoratedFrame*         Frame;
  44.     TControlBar*             ControlBar;
  45.     int                      ControlBarLoc;
  46.  
  47.   protected:
  48.     void CmFileNew();
  49.     void CmFileOpen();
  50.     void CmToggleHint();
  51.     void CeToggleHint(TCommandEnabler&);
  52.     void CmToggleBar();
  53.     void CeTestState(TCommandEnabler&);
  54.  
  55.   DECLARE_RESPONSE_TABLE(TMDIFileApp);
  56.  
  57. };
  58.  
  59. DEFINE_RESPONSE_TABLE1(TMDIFileApp, TApplication)
  60.   EV_COMMAND(CM_FILENEW, CmFileNew),
  61.   EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  62.   EV_COMMAND(CM_TOGGLEHINT, CmToggleHint),
  63.   EV_COMMAND_ENABLE(CM_TOGGLEHINT, CeToggleHint),
  64.   EV_COMMAND(CM_TOGGLEBAR, CmToggleBar),
  65.   EV_COMMAND_ENABLE(CM_TESTSTATE, CeTestState),
  66. END_RESPONSE_TABLE;
  67.  
  68.  
  69. //
  70. //
  71. //
  72. static TControlBar*
  73. BuildControlBar(TWindow* parent, TControlBar::TTileDirection direction)
  74. {
  75.   TControlBar* cb = new TControlBar(parent, direction);
  76.   cb->Insert(*new TButtonGadget(CM_FILENEW, CM_FILENEW));
  77.   cb->Insert(*new TButtonGadget(CM_FILEOPEN, CM_FILEOPEN));
  78.   cb->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE));
  79.   cb->Insert(*new TButtonGadget(CM_FILESAVEAS, CM_FILESAVEAS));
  80.  
  81.   cb->Insert(*new TSeparatorGadget);
  82.   cb->Insert(*new TButtonGadget(CM_EDITUNDO, CM_EDITUNDO));
  83.   cb->Insert(*new TButtonGadget(CM_EDITCUT, CM_EDITCUT));
  84.   cb->Insert(*new TButtonGadget(CM_EDITCOPY, CM_EDITCOPY));
  85.   cb->Insert(*new TButtonGadget(CM_EDITPASTE, CM_EDITPASTE));
  86.  
  87.   cb->Insert(*new TSeparatorGadget);
  88.   cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND));
  89.   cb->Insert(*new TButtonGadget(CM_EDITREPLACE, CM_EDITREPLACE));
  90.   cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT));
  91.  
  92.   cb->Insert(*new TSeparatorGadget);
  93.   cb->Insert(*new TButtonGadget(CM_TOGGLEHINT, CM_TOGGLEHINT,
  94.                                 TButtonGadget::NonExclusive));
  95.   cb->Insert(*new TSeparatorGadget);
  96.   cb->Insert(*new TButtonGadget(CM_TOGGLEBAR, CM_TOGGLEBAR));
  97.   cb->Insert(*new TSeparatorGadget);
  98.   cb->Insert(*new TButtonGadget(CM_TESTSTATE, CM_TESTSTATE));
  99.  
  100.   cb->Attr.Style |= WS_CLIPSIBLINGS;    // since toolbar may move around
  101.   cb->Attr.Id = IDW_TOOLBAR;            // From MDIFILE.H, so we can hide it
  102.  
  103.   return cb;
  104. }
  105.  
  106. //
  107. // Construct the TMDIFileApp's MainWindow of class TMDIFileWindow,
  108. // loading its menu, accelerator table & icon
  109. //
  110. void
  111. TMDIFileApp::InitMainWindow()
  112. {
  113.   Client = new TMDIClient;
  114.   Frame = new TDecoratedMDIFrame(Name, IDM_EDITFILE_DOC, *Client, true);
  115.   MainWindow = Frame;
  116.  
  117.   Frame->Attr.AccelTable = IDA_MDIFILE;
  118.   Frame->SetMenuDescr(TMenuDescr(IDM_EDITFILE_DOC, 1, 0, 0, 1, 1, 0));
  119.   Frame->SetIcon(this, IDI_MULTIFILE);
  120.  
  121.   // Construct, build and insert a control bar into the frame. Start out at
  122.   // the top of the frame
  123.   //
  124.   HintMode = TGadgetWindow::PressHints;
  125.   ControlBar = BuildControlBar(Frame, TControlBar::Horizontal);
  126.   ControlBarLoc = 0;
  127.   Frame->Insert(*ControlBar, Location[ControlBarLoc]);
  128.  
  129.   // Construct a status bar & insert it at the bottom
  130.   //
  131.   TStatusBar* sb = new TStatusBar(0, TGadget::Recessed,
  132.            TStatusBar::CapsLock | TStatusBar::NumLock |
  133.            TStatusBar::Overtype | TStatusBar::SizeGrip);
  134.  
  135.   Frame->Insert(*sb, TDecoratedFrame::Bottom);
  136.  
  137.   EnableCtl3d(true);
  138.  
  139.   // Initialize the file data struct used for open and saveas
  140.   //
  141.   FileData.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;
  142.   FileData.SetFilter(string(*this, IDS_FILEFILTER).c_str());
  143. }
  144.  
  145. extern "C" HWND __stdcall MakeTestForm(HWND hwndParent, LPUNKNOWN &obj);
  146.  
  147. //
  148. // Respond to "New" command by constructing, creating, and setting up a
  149. // new TFileWindow MDI child
  150. //
  151. void
  152. TMDIFileApp::CmFileNew()
  153. {
  154.   TMDIChild* child = new TMDIChild(*Client, "",
  155.       new TDelphiFormWrapper(MakeTestForm, 0, 0, 0)
  156.   );
  157.   child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0));
  158.   child->SetIcon(this, IDI_DOC);
  159.  
  160.   TMDIChild* curChild = Client->GetActiveMDIChild();
  161.   if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  162.     child->Attr.Style |= WS_MAXIMIZE;
  163.  
  164.   child->Create();
  165. }
  166.  
  167. //
  168. // Respond to "Open" command by constructing, creating, and setting up a
  169. // new TFileWindow MDI child
  170. //
  171. void
  172. TMDIFileApp::CmFileOpen()
  173. {
  174.   *FileData.FileName = 0;
  175.   if (TFileOpenDialog(MainWindow, FileData).Execute() == IDOK) {
  176.     TMDIChild* child = new TMDIChild(*Client, "", new TEditFile(0, 0, 0, 0, 0, 0, 0, FileData.FileName));
  177.     child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0));
  178.     child->SetIcon(this, IDI_DOC);
  179.  
  180.     TMDIChild* curChild = Client->GetActiveMDIChild();
  181.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  182.       child->Attr.Style |= WS_MAXIMIZE;
  183.  
  184.     child->Create();
  185.   }
  186. }
  187.  
  188. //
  189. //
  190. //
  191. void
  192. DoCreateChild(TWindow* win, void*)
  193. {
  194.   if (win->IsFlagSet(wfAutoCreate))
  195.     win->Create();
  196. }
  197.  
  198. //
  199. //
  200. //
  201. void
  202. TMDIFileApp::CeToggleHint(TCommandEnabler& ce)
  203. {
  204.   ce.SetCheck(HintMode == TGadgetWindow::EnterHints);
  205. }
  206.  
  207. //
  208. //
  209. //
  210. void
  211. TMDIFileApp::CmToggleHint()
  212. {
  213.   HintMode = HintMode==TGadgetWindow::PressHints ?
  214.                TGadgetWindow::EnterHints :
  215.                TGadgetWindow::PressHints;
  216.  
  217.   ControlBar->SetHintMode(HintMode);
  218.   ControlBar->SetHintCommand(-1);  // make sure we don't leave hint text dangling
  219. }
  220.  
  221. //
  222. //
  223. //
  224. void
  225. TMDIFileApp::CmToggleBar()
  226. {
  227.   ControlBarLoc = (ControlBarLoc+1) % COUNTOF(Location);
  228.   ControlBar->SetDirection(ControlBarLoc==0 ?
  229.                            TControlBar::Horizontal : TControlBar::Vertical);
  230.   Frame->Insert(*ControlBar, Location[ControlBarLoc]);
  231.   Frame->Layout();
  232. }
  233.  
  234. //
  235. //
  236. //
  237. void
  238. TMDIFileApp::CeTestState(TCommandEnabler& ce)
  239. {
  240.   ce.Enable();
  241.   ce.SetCheck(TCommandEnabler::Indeterminate);
  242. }
  243.  
  244. //
  245. //
  246. //
  247. int
  248. OwlMain(int /*argc*/, char* /*argv*/ [])
  249. {
  250.   return TMDIFileApp(AppName).Run();
  251. }
  252.